package ar.uba.tleng.g99.expregs.parser;

import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException;

/**
 * Parsea regexp's y devuelve la Expr evaluada.
 * 
 * @author g99
 */
public final class G99Parser {

	/**
	 * Devuelve la Expr evaluada de la regexp dada, o null si no es una regexp
	 * valida.
	 * 
	 * @param regexp
	 *            la regexp a parsear.
	 * @return Expr la expresion parseada, o null si no es una regexp valida.
	 */
	public Expr parse(String regexp) {
		GramaticaLexer lex = new GramaticaLexer(new ANTLRStringStream(regexp));
		CommonTokenStream tokens = new CommonTokenStream(lex);
		GramaticaParser parser = new GramaticaParser(tokens);
		try {
			Expr e = parser.s();
			return e;
		} catch (RecognitionException e) {
			return null;
		}
	}

}
